﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Xejen.Ipc.Framework.Flows
{
    /// <summary>
    /// 表示控制流的过程实例
    /// </summary>
    /// <creator>marc</creator>
    public interface IFlowInstance
    {
        /// <inheritdoc cref="IFlow{TData}.Id" path="/summary"/>
        int Id { get; }
        /// <inheritdoc cref="IFlow{TData}.Name" path="/summary"/>
        string Name { get; }
        /// <summary>
        /// 父流程
        /// </summary>
        IFlowInstance Parent { get; }
        /// <inheritdoc cref="FlowStatus"/>
        FlowStatus Status { get; }
        /// <summary>
        /// 控制流的执行开始时间，这是周期内的循环开始时间
        /// </summary>
        DateTime? CycleStartTime { get; }
        /// <summary>
        /// 控制流的结束时间，这是周期内的循环结束时间<br/>
        /// 不一定会有值，比如周期内被外部令牌中止，或者周期内发生异常跳出时，那么就不会赋值
        /// </summary>
        DateTime? CycleEndTime { get; }
        /// <summary>
        /// 周期内执行时间，即扫描周期。这里记录的值是上一个周期的扫描时间，本次周期因为没有循环完，是无法计算的。
        /// </summary>
        TimeSpan? CycleExecutionTime { get; }
    }
}
